package com.csap.framework.apidoc.properties;

import com.csap.framework.apidoc.model.CsapDocResource;
import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.boot.context.properties.NestedConfigurationProperty;

import java.util.HashSet;
import java.util.List;
import java.util.Set;

/**
 * @author yangchengfu
 * @description csap 文档属性
 * @dataTime 2019年-12月-27日 14:40:00
 **/
@ConfigurationProperties(
        prefix = CsapDocConfig.PREFIX
)
@Data
public class CsapDocConfig {
    public static final String PREFIX = "csap.doc";
    /**
     * api的基本信息
     */
    @NestedConfigurationProperty
    private CsapApiInfo apiInfo;

    /**
     * 分页信息
     */
    @NestedConfigurationProperty
    private PageConfig pageConfig = new PageConfig();
    /**
     * 扫描的包
     */
    private Set<String> apiPackages;

    /**
     * 返回的枚举类，扫描包
     */
    private Set<String> enumPackages;

    /**
     * 模型/实体类扫描包路径
     */
    private Set<String> modelPackages;
    /**
     * 是否扫描子包
     */
    private Boolean showChildPackageFlag = Boolean.TRUE;
    /**
     * 文档资源
     */
    @NestedConfigurationProperty
    private List<CsapDocResource> docResources;

    public void setApiPackages(List<String> apiPackages) {
        if (this.apiPackages == null) {
            this.apiPackages = new HashSet<>();
        }
        if (apiPackages != null) {
            this.apiPackages.addAll(apiPackages);
        }
    }

    public void setEnumPackages(List<String> enumPackages) {
        if (this.enumPackages == null) {
            this.enumPackages = new HashSet<>();
        }
        if (enumPackages != null) {
            this.enumPackages.addAll(enumPackages);
        }
    }

    public void setModelPackages(List<String> modelPackages) {
        if (this.modelPackages == null) {
            this.modelPackages = new HashSet<>();
        }
        if (modelPackages != null) {
            this.modelPackages.addAll(modelPackages);
        }
    }

    public CsapApiInfo getApiInfo() {
        return apiInfo == null ? CsapApiInfo.DEFAULT : apiInfo;
    }
}
